function transmitted_signal = generate_transmitted_signal(common_stream, private_symbols, ...
    precoding, power_common, power_private, num_tx_antennas)
% generate_transmitted_signal - 生成RSMA系统的发送信号
%
% 输入参数:
%   common_stream   - 公共流符号
%   private_symbols - 私有流符号的元胞数组
%   precoding       - 预编码结构体
%   power_common    - 公共流功率分配系数
%   power_private   - 每个用户私有流功率分配系数
%   num_tx_antennas - 发射天线数量
%
% 输出参数:
%   transmitted_signal - 发送信号矩阵，每列是一个时刻的发送向量

% 获取用户数量
num_users = length(private_symbols);

% 获取所有流的符号长度
common_length = length(common_stream);
private_lengths = zeros(1, num_users);
for u = 1:num_users
    private_lengths(u) = length(private_symbols{u});
end

% 取最大长度作为发送信号长度
signal_length = max([common_length, private_lengths]);

% 初始化发送信号矩阵
transmitted_signal = zeros(num_tx_antennas, signal_length);

% 生成公共流的发送信号部分
% 对于超出common_stream长度的部分，用零填充
common_padded = [common_stream, zeros(1, signal_length - common_length)];
common_signal = sqrt(power_common) * (precoding.common * common_padded);

% 将公共流信号添加到发送信号中
transmitted_signal = transmitted_signal + common_signal;

% 生成每个用户私有流的发送信号部分
for u = 1:num_users
    % 获取私有流符号并填充到统一长度
    private_stream = private_symbols{u};
    private_padded = [private_stream, zeros(1, signal_length - length(private_stream))];
    
    % 应用预编码和功率分配
    private_signal = sqrt(power_private) * (precoding.private{u} * private_padded);
    
    % 将私有流信号添加到发送信号中
    transmitted_signal = transmitted_signal + private_signal;
end

% 归一化发送信号功率
% 在RSMA中，总发送功率通常归一化为1
transmitted_signal = transmitted_signal / sqrt(mean(sum(abs(transmitted_signal).^2))); 

% 验证功率约束
actual_power = mean(sum(abs(transmitted_signal).^2));
fprintf('实际发送功率: %.4f (期望值: 1.0)\n', actual_power);

% 计算公共流和私有流的功率分布
common_power = mean(sum(abs(common_signal).^2));
fprintf('公共流实际功率比例: %.4f (期望值: %.4f)\n', common_power/actual_power, power_common);

end 